﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ecommerce.Model;

namespace Ecommerce.Admin.Controles
{
    public partial class InformacoesProduto : System.Web.UI.UserControl
    {

        public int IdPro { get; set; }
        public bool Editar { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                CarregarCategorias();

                if (Request.QueryString["IdPro"] != null)
                {
                    IdPro = Convert.ToInt32(Request.QueryString["IdPro"]);
                    hddEditar.Value = IdPro.ToString();
                    ObterProduto();
                }
            }
        }

        private void CarregarCategorias()
        {
            CategoriaModel model = new CategoriaModel();
            var categorias = model.Listar();
            ddlCategoria.DataValueField = "cat_idt_categoria";
            ddlCategoria.DataTextField = "cat_des_categoria";
            ddlCategoria.DataSource = categorias;
            ddlCategoria.DataBind();
        }

        private void ObterProduto()
        {
            ProdutoModel model = new ProdutoModel();
            var prod = model.Obter(IdPro);

            txtCodFabricante.Text = prod.pro_cod_fabricante;
            txtCodigo.Text = prod.pro_cod_produto;
            txtDescAbreviada.Text = prod.pro_des_abreviada;
            txtDescricao.Text = prod.pro_des_produto;
            txtNome.Text = prod.pro_nom_produto;
            txtComprimento.Text = prod.pro_vlr_comprimento.ToString();
            txtLargura.Text = prod.pro_vlr_largura.ToString();
            txtPeso.Text = prod.pro_vlr_peso.ToString();
            txtPrecoConsumidor.Text = prod.pro_vlr_preco_consumidor.ToString();
            txtPrecoCusto.Text = prod.pro_vlr_preco_custo.ToString();
            txtPrecoRevenda.Text = prod.pro_vlr_preco_revenda.ToString();
            
            chkAtivo.Checked = prod.pro_flg_ativo;
            chkExibirPaginaInicial.Checked = prod.pro_flg_exibir_pagina_inicial;
            chkProdutoDisponivel.Checked = prod.pro_flg_produto_disponivel;

            ddlCategoria.Items.FindByValue(prod.cat_idt_categoria.ToString()).Selected = true;
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            var model = new ProdutoModel();

            if (!cvCodigoProduto.IsValid)
                return;
            
            var produto = new tb_pro_produto();
            produto.pro_cod_fabricante = txtCodFabricante.Text;
            produto.pro_cod_produto = txtCodigo.Text;
            produto.pro_dat_criacao = DateTime.Now;
            produto.pro_des_abreviada = txtDescAbreviada.Text;
            produto.pro_des_produto = txtDescricao.Text;
            produto.pro_flg_ativo = chkAtivo.Checked;
            produto.pro_flg_exibir_pagina_inicial = chkExibirPaginaInicial.Checked;
            produto.pro_flg_produto_disponivel = chkProdutoDisponivel.Checked;
            produto.pro_nom_produto = txtNome.Text;

            if (!String.IsNullOrEmpty(txtComprimento.Text))
                produto.pro_vlr_comprimento = Convert.ToDecimal(txtComprimento.Text);

            if (!String.IsNullOrEmpty(txtLargura.Text))
                produto.pro_vlr_largura = Convert.ToDecimal(txtLargura.Text);

            if (!String.IsNullOrEmpty(txtPeso.Text))
                produto.pro_vlr_peso = Convert.ToDecimal(txtPeso.Text);

            produto.pro_vlr_preco_consumidor = Convert.ToDecimal(txtPrecoConsumidor.Text);
            produto.pro_vlr_preco_custo = Convert.ToDecimal(txtPrecoCusto.Text);
            produto.pro_vlr_preco_revenda = Convert.ToDecimal(txtPrecoRevenda.Text);

            produto.tb_cat_categoria = new tb_cat_categoria();
            produto.cat_idt_categoria = Convert.ToInt32(ddlCategoria.SelectedValue);

            CategoriaModel cm = new CategoriaModel();
            produto.tb_cat_categoria = cm.Obter(Convert.ToInt32(ddlCategoria.SelectedValue));

            if (!String.IsNullOrEmpty(hddEditar.Value))
            {
                produto.pro_idt_produto = Convert.ToInt32(hddEditar.Value);
                model.Editar(produto);
            }
            else
                model.Inserir(produto);

            Response.Redirect(Request.Url.AbsoluteUri);
        }

        protected void cvCodigoProduto_ServerValidate(object source, ServerValidateEventArgs args)
        {
            var model = new ProdutoModel();
            var produto = model.ObterPorCodigo(args.Value);
            bool codigoExiste = produto != null;
            bool modoEditar = !String.IsNullOrEmpty(hddEditar.Value);

            if (modoEditar == true && codigoExiste)
            {
                if (produto.pro_idt_produto == Convert.ToInt32(hddEditar.Value))
                    args.IsValid = true;
                else
                    args.IsValid = false;
            }
            else
            { 
                if(!codigoExiste)
                    args.IsValid = true;
                else
                    args.IsValid = false;
            }
        }

    }
}